/**  
* @author renbangjie renbangjie@126.com  
* @date 2014-11-8 下午3:15:49
* @version V1.0  
* <b>Copyright (c)</b> 2014医信金融信息服务（上海）有限公司-版权所有<br/>
*/
package com.yjd.comm.pay.service;

import java.math.BigDecimal;
import java.util.List;

import com.yjd.comm.base.service.IBaseService;
import com.yjd.comm.enums.BankEnums.EnterpriseBankStatus;
import com.yjd.comm.funds.model.FundsDataModel;
import com.yjd.comm.funds.model.FundsModel;
import com.yjd.comm.pay.dto.BankInfoDto;
import com.yjd.comm.recharge.model.BankCodeModel;
import com.yjd.comm.recharge.model.OrderModel;
import com.yjd.comm.recharge.model.RechargeChannelModel;

/**
 * 充值的操作数据库的业务接口
 * @author renbangjie renbangjie@126.com
 * @date 2014-11-8 下午3:15:49
 */
public interface IRechargeService extends IBaseService {
	
	/**
	 * 根据内部流水号获取订单信息
	* @param transID
	* @return OrderModel
	 */
	public OrderModel getOrderModelByOrderID(String transID);
	
	/**
	 * 更新内部交易流水号
	* @param order_id 主键
	* @param orderid 流水号
	* @return boolean
	 */
	public boolean updateOrderID(Long order_id, String orderid);
	
	/**
	 * 根据银行id查询关联的充值渠道的详细信息
	* @param idBank
	* @return RechargeChannelModel
	 */
	public BankCodeModel getChannelByIdBank(Integer idBank);
	
	
	/**
	 * 查询充值渠道的详细信息
	* @param idChannel 充值渠道id
	* @return RechargeChannelModel
	 */
	public RechargeChannelModel getChannelById(Integer idChannel);
	
	/**
	 * 根据交易流水号获取交易订单
	* @param transId 交易流水号
	* @return OrderModel
	 */
	public OrderModel getOrderModelById(Long order_id);
	
	
	/**
	 * 添加充值订单
	* @param model 充值订单对象
	* @return OrderModel
	 */
	public OrderModel insertOrderModel(OrderModel model);
	
	/**
	 * 记录充值交易流水
	* @param model 资金流水对象
	* @return FundsDataModel
	 */
	public FundsDataModel insertFundsDataModel(FundsDataModel model);
	
	/**
	 * 更新资金表
	* @param balance 充值金额
	* @param idUser 用户
	* @return boolean
	 * @throws Exception 
	 */
	public boolean updateFundsModelByUser(Double balance, Long idUser) throws Exception;
	
	
	/**
	 * 更新订单状态
	* @param status 订单状态
	* @param order_id 订单流水号
	* @param idUser 用户
	* @return boolean
	 */
	public boolean updateOrderModelStatus(Double balance, Double poundage, Double deduction, int status, Long order_id, Long idUser, Long uptime, String transID);
	
	
	/**
	 * 更新订单
	* @param model
	* @return boolean
	 */
	public boolean updateOrderModelStatus(OrderModel model);
	
	/**
	 * 获取用户资金表
	* @param user_id
	* @return FundsModel
	 */
	public FundsModel getFundsModelById(Integer user_id);
	
	/**
	 * 银行状态正常、充值渠道正常的银行
	* @param status 是否支持企业银行
	* @return List<BankInfoModel>
	 */
	public List<BankInfoDto> getEnableBanks(EnterpriseBankStatus status);
	
	/**
	 * 充值券充值
	* @param balance 充值金额
	* @param idUser 用户
	* @return boolean
	 * @throws Exception 
	 */
	public boolean updateVoucherFundsModelByUser(Double direct_amount, Double return_amount, Long idUser) throws Exception;
	
	/**
	 * 实名认证扣费
	* @param idUser
	* @param amount
	* @return deduction
	 * @throws Exception 
	 */
	public boolean authdeduction(Long idUser, Double amount) throws Exception;
	
}
